import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


def set_chinese_font():
    """设置中文字体"""
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'DejaVu Sans']
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

set_chinese_font()

def statistics_demo():
    # 生成模拟数据
    np.random.seed(42)
    data = {
        '数学': np.random.normal(75, 10, 100),
        '语文': np.random.normal(80, 8, 100),
        '英语': np.random.normal(78, 12, 100)
    }
    df = pd.DataFrame(data)
    
    # 创建统计图表
    fig, axes = plt.subplots(2, 2, figsize=(12, 10))
    
    # 直方图
    axes[0, 0].hist(df['数学'], bins=15, alpha=0.7, color='skyblue', edgecolor='black')
    axes[0, 0].set_title('数学成绩分布')
    axes[0, 0].set_xlabel('分数')
    axes[0, 0].set_ylabel('频数')
    
    # 箱线图
    box_data = [df['数学'], df['语文'], df['英语']]
    axes[0, 1].boxplot(box_data, labels=['数学', '语文', '英语'])
    axes[0, 1].set_title('各科成绩箱线图')
    axes[0, 1].set_ylabel('分数')
    
    # 散点图
    axes[1, 0].scatter(df['数学'], df['英语'], alpha=0.7, color='green')
    axes[1, 0].set_title('数学与英语成绩关系')
    axes[1, 0].set_xlabel('数学成绩')
    axes[1, 0].set_ylabel('英语成绩')
    
    # 饼图 - 成绩等级分布
    math_grades = pd.cut(df['数学'], bins=[0, 60, 70, 80, 90, 100], 
                         labels=['不及格', '及格', '中等', '良好', '优秀'])
    grade_counts = math_grades.value_counts()
    
    axes[1, 1].pie(grade_counts.values, labels=grade_counts.index, autopct='%1.1f%%')
    axes[1, 1].set_title('数学成绩等级分布')
    
    plt.tight_layout()
    plt.show()
    
    # 输出基本统计量
    print("各科成绩统计描述:")
    print(df.describe())

statistics_demo()